home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / kcl.lha / h / eval.h < prev    next >
C/C++ Source or Header  |  1987-06-04  |  3KB  |  111 lines

  1. /*
  2. (c) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
  3. Copying of this file is authorized to users who have executed the true and
  4. proper "License Agreement for Kyoto Common LISP" with SIGLISP.
  5. */
  6.  
  7. /*
  8.     eval.h
  9. */
  10.  
  11.  
  12. /*  C control stack  */
  13.  
  14. #define    CSSIZE        20000
  15. #define    CSGETA        4000
  16.  
  17. int *cs_org;
  18. int *cs_limit;
  19.  
  20. #ifdef AV
  21. #define    cs_check(something) \
  22.     if ((int *)(&something) < cs_limit) \
  23.         cs_overflow()
  24. #endif
  25. #ifdef MV
  26.  
  27.  
  28.  
  29. #endif
  30.  
  31. /*  bind template  */
  32.  
  33. struct bind_temp {
  34.     object    bt_var;
  35.     object    bt_spp;
  36.     object    bt_init;
  37.     object    bt_aux;
  38. };
  39.  
  40.  
  41. #define check_symbol(x) \
  42.     if (type_of(x) != t_symbol) \
  43.         not_a_symbol(x)
  44.  
  45. #define    check_var(x) \
  46.     if (type_of(x) != t_symbol || \
  47.         (enum stype)(x)->s.s_stype == stp_constant) \
  48.         not_a_variable(x)
  49.  
  50.  
  51. #define    eval_assign(to, form)  \
  52. {  \
  53.     object *old_top = vs_top;  \
  54.   \
  55.     eval(form);  \
  56.     to = vs_base[0];  \
  57.     vs_top = old_top;  \
  58. }
  59.  
  60.  
  61. #define MMcall(x)  \
  62.     ihs_check;  \
  63.     ihs_push(x);  \
  64.     (*(x)->cf.cf_self)();  \
  65.     ihs_pop()
  66.  
  67. #define MMccall(x, env_top)  \
  68.     ihs_check;  \
  69.     ihs_push(x);  \
  70.     (*(x)->cc.cc_self)(env_top);  \
  71.     ihs_pop()
  72.  
  73.  
  74. #define MMcons(a,d)    make_cons((a),(d))
  75.  
  76.  
  77. #define MMcar(x)    (x)->c.c_car
  78. #define MMcdr(x)    (x)->c.c_cdr
  79. #define MMcaar(x)    (x)->c.c_car->c.c_car
  80. #define MMcadr(x)    (x)->c.c_cdr->c.c_car
  81. #define MMcdar(x)    (x)->c.c_car->c.c_cdr
  82. #define MMcddr(x)    (x)->c.c_cdr->c.c_cdr
  83. #define MMcaaar(x)    (x)->c.c_car->c.c_car->c.c_car
  84. #define MMcaadr(x)    (x)->c.c_cdr->c.c_car->c.c_car
  85. #define MMcadar(x)    (x)->c.c_car->c.c_cdr->c.c_car
  86. #define MMcaddr(x)    (x)->c.c_cdr->c.c_cdr->c.c_car
  87. #define MMcdaar(x)    (x)->c.c_car->c.c_car->c.c_cdr
  88. #define MMcdadr(x)    (x)->c.c_cdr->c.c_car->c.c_cdr
  89. #define MMcddar(x)    (x)->c.c_car->c.c_cdr->c.c_cdr
  90. #define MMcdddr(x)    (x)->c.c_cdr->c.c_cdr->c.c_cdr
  91. #define MMcaaaar(x)    (x)->c.c_car->c.c_car->c.c_car->c.c_car
  92. #define MMcaaadr(x)    (x)->c.c_cdr->c.c_car->c.c_car->c.c_car
  93. #define MMcaadar(x)    (x)->c.c_car->c.c_cdr->c.c_car->c.c_car
  94. #define MMcaaddr(x)    (x)->c.c_cdr->c.c_cdr->c.c_car->c.c_car
  95. #define MMcadaar(x)    (x)->c.c_car->c.c_car->c.c_cdr->c.c_car
  96. #define MMcadadr(x)    (x)->c.c_cdr->c.c_car->c.c_cdr->c.c_car
  97. #define MMcaddar(x)    (x)->c.c_car->c.c_cdr->c.c_cdr->c.c_car
  98. #define MMcadddr(x)    (x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_car
  99. #define MMcdaaar(x)    (x)->c.c_car->c.c_car->c.c_car->c.c_cdr
  100. #define MMcdaadr(x)    (x)->c.c_cdr->c.c_car->c.c_car->c.c_cdr
  101. #define MMcdadar(x)    (x)->c.c_car->c.c_cdr->c.c_car->c.c_cdr
  102. #define MMcdaddr(x)    (x)->c.c_cdr->c.c_cdr->c.c_car->c.c_cdr
  103. #define MMcddaar(x)    (x)->c.c_car->c.c_car->c.c_cdr->c.c_cdr
  104. #define MMcddadr(x)    (x)->c.c_cdr->c.c_car->c.c_cdr->c.c_cdr
  105. #define MMcdddar(x)    (x)->c.c_car->c.c_cdr->c.c_cdr->c.c_cdr
  106. #define MMcddddr(x)    (x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_cdr
  107.  
  108.  
  109. #define MMnull(x)    ((x)==Cnil)
  110.  
  111.